package ed2.tradutor;

import java.util.LinkedList;
import java.util.Queue;

import ed2.base.Operacao;
import ed2.fisico.acesso.ScanTabela;
import ed2.fisico.juncao.HashJoin;
import ed2.logico.Juncao;
import ed2.logico.Projecao;
import ed2.logico.Relacao;
import ed2.logico.Selecao;

public class TradutorPlanoLogicoVisitor implements PlanoLogicoVisitor {
	
	private Queue<Operacao> planosFisicos = new LinkedList<>();
	

	@Override
	public void visit(Projecao projecao) {
		System.out.println("Visita a projecao");
					
	}

	@Override
	public void visit(Juncao juncao) {
		System.out.println("Visita a juncao");
		Operacao relacaoEsquerda = planosFisicos.poll();
		Operacao relacaoDireita = planosFisicos.poll();
		HashJoin hashjoin = new HashJoin(relacaoEsquerda, juncao.getCampo1(), relacaoDireita, juncao.getCampo2());
		planosFisicos.add(hashjoin);
		
	}

	@Override
	public void visit(Selecao selecao) {
		System.out.println("Visita a selecao");
		
	}

	@Override
	public void visit(Relacao relacao) {
		System.out.println("Visita a relacao("+relacao.getNome()+")");
		Operacao operacao = new ScanTabela(relacao.getNome());
		planosFisicos.add(operacao);
	}
	
	
	
}
